﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProtocoloCarSharing;

namespace ServidorCommunications
{
    public class AgenteVehiculoManager
    {

        public MensajeProtocolo ManageMensajesAgenteVehiculo(MensajeProtocolo requestMsg)
        {
            MensajeProtocolo response = null;
            if (requestMsg.Header.Equals(Protocolo.Header.REQ))
            {
                List<string> datos = requestMsg.InfoDatos();
                switch (requestMsg.Cmd)
                {
                    case Protocolo.Comando.IDENTIFICAR_USUARIO:
                        response = IdentificarUsuario(requestMsg);
                        break;
                    case Protocolo.Comando.CONSUMO:
                        response = EstadoDelViaje(requestMsg);
                        break;
                    case Protocolo.Comando.FIN_VIAJE:
                        response = FinDelViaje(requestMsg);
                        break;
                    default:
                        response = new MensajeProtocolo(Protocolo.Header.RES, requestMsg.Cmd, 0, Protocolo.ERROR + Protocolo.END_OF_MSJ);
 
                        break;
                }
            }
            else 
            {
                response = new MensajeProtocolo(Protocolo.Header.RES, requestMsg.Cmd, 0, Protocolo.ERROR + Protocolo.END_OF_MSJ);
            }

            return response;
        }      

        /// <summary>
        /// Metodo que identifica al usuario y se conecta con el servidor Gestion de cliente
        /// Debe mandar como datos  el usuario<SEP>password<SEP>
        /// y recibo usuario<SEP>OK o Error
        /// </summary>
        /// <param name="datos"></param>
        /// <returns></returns>
        private MensajeProtocolo IdentificarUsuario(MensajeProtocolo requestMsg)
        {
            MensajeProtocolo response = MSMQManager.GetInstancia().EnviarMSMQ("ValidarCliente", requestMsg);
            //response = new MensajeProtocolo(Protocolo.Header.RES, requestMsg.Cmd, 0, Protocolo.OK);
            //Aca identifico al usuario por MSMQ al servidor gestion de cliente
            return response;
        }

        /// <summary>
        /// tengo que mandar por remoting nombre<SEP>password<SEP>latitud<SEP>longitud<SEP>consumoKm<SEP>estado
        /// El consumo voy a tener que pasar lo consumido entre el ultimo estado y el actual
        /// </summary>
        /// <param name="datos"></param>
        /// <returns></returns>
        private MensajeProtocolo EstadoDelViaje(MensajeProtocolo requestMsg)
        {
            MensajeProtocolo response = Remoting.GetInstancia().EnviarMensajeAServCobro(requestMsg);
            //Aca debo llamar al metodo de remoting para conectarme con el servidor de Cobro
            return response;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="datos"></param>
        /// <returns></returns>
        private MensajeProtocolo FinDelViaje(MensajeProtocolo requestMsg)
        {
            MensajeProtocolo response = new MensajeProtocolo(Protocolo.Header.RES, requestMsg.Cmd, 0, Protocolo.OK);
            //Aca debo comunicarme con el metodo de Gestion de cliente para infomar que el usuario queda libre
            //Tambien envia el estado final por remoting
            return response;
        }
    }
}
